package hihocode;

import java.util.HashMap;
import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;


public class TwoSumProblem {

	//1505 小Hi和小Ho的礼物
	//	求给定数组中的 两个数的和  等于 另外两个数的和
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		int n;
		int[] array;
		while(scanner.hasNext()){
			n = scanner.nextInt();
			array = new int[n];
			for(int i = 0; i < n; i++){
				array[i] = scanner.nextInt();
			}
			System.out.println(fourSumCount_2(array));
		}
		scanner.close();
	}
	
	
	//
	public static long fourSumCount_2(int[] array) {
		int sum = 0;
		HashMap<Integer, Integer> hash = new HashMap<Integer, Integer>();
		HashMap<Integer, Integer> count = new HashMap<>();
		for (int i = 0; i < array.length; i++) {
			Integer curCount;
			if( (curCount = count.get(array[i])) != null){
				count.put(array[i], curCount + 1);
			}else{
				count.put(array[i],  1);
			}
			for (int j = i + 1; j < array.length; j++) {
				sum = array[i] + array[j];
				Integer curTimes;
				if( (curTimes = hash.get(sum)) != null){
					hash.put(sum, curTimes + 1);
				}else{
					hash.put(sum,  1);
				}
			}
		}
		long res = 0;
		for (int i = 0; i < array.length; i++) {
			for (int j = i + 1; j < array.length; j++) {
//				Integer times;
//				if ((times = hash.get(array[j] + array[i])) != null) {
//					res += times;
////				}
				res += hash.get(array[j] + array[i]);
				//然后我们再去除重复的
				//当a[i]等于a[j]时
				//p == i时，j与q重复的可能是count[a[j]] - 1,因为此时i占据了一个元素
				//q == j时，i与p重复的可能是count[a[i]] - 1
				//算重复了一次，就是两个都重复的可能，所以要加1
				if(array[i]== array[j]){
					res -= (count.get(array[i]) - 1) * 2 - 1;
				}else{
					//不相等时，重复的次数是count[a[j]]、count[a[i]]
					res -= (count.get(array[i])) + (count.get(array[j])) - 1;
				}
			}
		}
		return res;
	}
	
	
	// wrong answer
//	public static int fourSumCount(int[] array) {
//    	int sum = 0;
//    	HashMap<Integer, Node> hash = new HashMap<Integer, Node>();
//    	for (int i = 0; i < array.length; i++) {
//			for (int j = i + 1; j < array.length; j++) {
//				sum = array[i] + array[j];
//				Node node = null;
//				if( (node = hash.get(sum)) == null){
//					hash.put(sum, new Node(new Pair(i, j), 1));
//				}else{
//					node.times++;
//					node.set.add(new Pair(i, j));
//				}
//			}
//    	}
//    	int res = 0;
//    	for (int i = 0; i < array.length; i++) {
//			for (int j = i + 1; j < array.length; j++) {
//				Node node;
//				if ((node = hash.get(array[j] + array[i])) != null) {
//					Pair cur = new Pair(i, j);
//					for (Pair sPair: node.set) {
//						if(!cur.equals(sPair)){
//							res ++;
//						}
//					}
//				}
//			}
//    	}
//    	return res;
//    }
//	
//	private static class Node{
//		public Set<Pair> set = new HashSet<>();
//		public int times;
//		
//		public Node(Pair pair, int sum){
//			this.times = sum;
//			set.add(pair);
//		}
//	}
//	
//	private static class Pair{
//		int i; int j;
//		public Pair(int i, int j){
//			this.i = i;
//			this.j = j;
//		}
//		
//		@Override
//		public boolean equals(Object object) {
//			if(!(object instanceof Pair)){
//				return false;
//			}
//			Pair obj = (Pair) object;
//			return !(i != obj.i && i != obj.j && j != obj.i && j != obj.j);
//		}
//	}
}
